﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace BatailleNavale
{
    public class Bateau
    {
        private int tailleBateau; // taille du bateu 3,4,5
        private string caseDepart; // nom de la case de départ
        private char verticalHorizontal; // sera h ou v pour horizontal et vertical
        public char sensBateau; // g pour gauche, d pour droite, h pour haut, b pour bas
        private int coordXBase;
        private int coordYBase;
        private string[] casesBateau; //tableau contenant toute les cases du bateau nt 
        private int degatBateau=0; //indique les dégats que le bateau a subit : 0, 1 , 2 [...]
        Form1 formUse; //Form pour pouvoir Dessiner un bateau

        public Bateau(int tailleBateau, string caseName, char sensBateau, char verticalHorizontal, int coordYBase, int coordXBase, Form1 formUse)
        {
            this.tailleBateau = tailleBateau;
            caseDepart= caseName;
            this.sensBateau = sensBateau;
            this.verticalHorizontal = verticalHorizontal;
            this.coordXBase = coordXBase;
            this.coordYBase = coordYBase;
            casesBateau = new string[tailleBateau];
            this.formUse = formUse;
        }

        public Bateau(int tailleBateau, char sensBateau, int coordYBase, int coordXBase)
        {
            this.tailleBateau = tailleBateau;
            this.sensBateau = sensBateau;
            this.coordXBase = coordXBase;
            casesBateau = new string[tailleBateau];
            this.coordYBase = coordYBase;

 
        } //surcharge pour bateau virtuel afin de vérifier la collision

        public string recupType()
        {
            string type;
            switch (tailleBateau)
            {
                case 5:
                    type = "PorteAvion";
                    break;
                case 4:
                    type = "croiseur";
                    break;
                case 3:
                    type = "sousMarin";
                    break;
                case 2:
                    type = "torpilleur";
                    break;
                default :
                    type = "notype";
                    break;
            }
            return type;
        } // récupère le type du bateau

        public string[] getCases() //retourne toutes les cases du bateau dans un tableau
        {
            int caseActu;
            casesBateau[0] =  Convert.ToString(coordYBase) + "," +  Convert.ToString(coordXBase);
            for (int j = 1; j < tailleBateau; j++)
            {
                switch (sensBateau)
                {
                    case 'g':
                        caseActu = coordXBase - j;
                        casesBateau[j] =  Convert.ToString(coordYBase) + "," + Convert.ToString(caseActu);
                        break;
                    case 'd':
                        caseActu = coordXBase + j;
                        casesBateau[j] =  Convert.ToString(coordYBase) + "," + Convert.ToString(caseActu);
                        break;
                    case 'h':
                        caseActu = coordYBase + j;
                        casesBateau[j] = Convert.ToString(caseActu) + "," +  Convert.ToString(coordXBase);
                        break;
                    case 'b':
                        caseActu = coordYBase - j;
                        casesBateau[j] = Convert.ToString(caseActu) + "," +  Convert.ToString(coordXBase);
                        break;
                    default :
                        break;
                }
            }
            if (sensBateau == 'g' || sensBateau == 'b')
            {
                Array.Reverse(casesBateau);
 
            }
            return casesBateau;
        }

        public int getTaille() // retourne la taille du bateau
        {
            return tailleBateau;
        }

        public void DessinerBateau()
        {
            formUse.DessinBat(getCases(), recupType(), verticalHorizontal);
        } //déssine le bateau sur le Form

        public bool AddDegatBateau()  
        {
            degatBateau++;
            if (degatBateau == tailleBateau)
            {
                return true;
            }
            else
            {
                return false;
            }

        } //Ajoute +1 a degatBateau et vérifie si il est détruit

        public bool BateauDetruit() // vérifie si un bateau est détruit
        {
            if (degatBateau == tailleBateau)
            {
                return true;
            }else{
                return false;
            }
        }
    }
}
